package cn.kgc.spring.day03.cglib;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

/**
 * @author 课工场
 * @date 2024/11/7
 * @description  基于 Cglib代理的工具类
 *
 * 基于父子类关系的代理
 */
public class CglibProxy {


    // 被代理对象
    private Object obj;

    public CglibProxy(Object obj){
        this.obj = obj;
    }


    public Object createObjProxy(){

        // 生成代理对象的工具
        Enhancer enhancer = new Enhancer();

        //  设置代理对象的父类
        enhancer.setSuperclass(obj.getClass());

        //  设置需要增强的功能
        InvocationHandler invocationHandler = (o, method, objects) -> {

            Object invoke = method.invoke(obj, objects);

            System.out.println("学习时间太长了,休息一下...");
            return invoke;

        };

        enhancer.setCallback(invocationHandler);

        // 调用create() 生成代理对象
        Object o = enhancer.create();

        return o;
    }


}
